package com.bkbw.live.battle.net.message;

import java.io.File;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bkbw.live.battle.net.codec.PackageHead;

import com.bkbw.live.battle.net.message.handler.MoveHandler;

/**
 * 消息中心
 * @author zhouyou
 *
 */
public class MessageCenter {
	private Map<Integer,List<MessageHandler>> map = new HashMap<Integer,List<MessageHandler>>();
	
	////////////////单例模式
	private MessageCenter() {}
	private static MessageCenter instance;
	public static MessageCenter getInstance(){
		if(instance==null){
			instance = new MessageCenter();
		}
		return instance;
	}
	////////////////
	
	//注册消息处理器件对象
	public void addMessageHandler(int head,MessageHandler handlerObject){
		if(map.get(head)==null){
			List<MessageHandler> li = new ArrayList<MessageHandler>();
			map.put(head, li);
		}
		List<MessageHandler> list = map.get(head);
		list.add(handlerObject);
	}
	
	//把消息分派到对此消息感兴趣的消息处理对象
	public void dispacthMessage(MessageObject mo){
		List<MessageHandler> list = map.get(mo.getHead());
		for(MessageHandler mh:list){
			mh.receive(mo);
		}
	}
	
	//初始化
	public static void init(){
		//根据反射动态去加载net.message.handler.这个包下的所有类的构造函数
//		URL url = MoveHandler.class.getResource("");
//		File f = new File(url.getPath());
//		File[] files = f.listFiles();
//		for(File file:files){
//			//获得类名
//			String s = file.getName();
//			String className = s.substring(0,s.indexOf("."));
//			try {
//				//反射执行无参数构造函数
//				Class c = Class.forName("net.message.handler."+className);
//				c.getConstructor(null).newInstance(null);
//				System.out.println("加载消息处理器:"+className);
//			} catch (Exception e) {
//				// TODO: handle exception
//			}
//		}
	    //getInstance().addMessageHandler(PackageHead.TEST, new MoveHandler());
		new MoveHandler();
	}
	
	public static void main(String[] args) {
		init();
	}
}
